package com.divemotor.ventarepuestosinternet.beans.lazy;

import java.util.List;
import java.util.Map;
import org.apache.log4j.Logger;
import org.primefaces.model.LazyDataModel;
import org.primefaces.model.SortOrder;

import com.divemotor.ventarepuestosinternet.beans.adapter.RepuestoAdapter;
import com.divemotor.ventarepuestosinternet.beans.form.RepuestoForm;
import com.divemotor.ventarepuestosinternet.exception.DivemotorBusinessException;
import com.divemotor.ventarepuestosinternet.service.RepuestoService;

public class RepuestosLazy extends LazyDataModel<RepuestoAdapter> {

	private static final long serialVersionUID = 1L;
	public static final Logger LOGGER = Logger.getLogger(RepuestosLazy.class);
    private List<RepuestoAdapter> listaRepuestos;
	private RepuestoService repuestoService;
	private RepuestoForm repuestoFiltro;
	private Integer nroRegistros;
	
	public RepuestosLazy(RepuestoService repuestoService, RepuestoForm repuestoFiltro){
		this.repuestoService = repuestoService;
		this.repuestoFiltro = repuestoFiltro;
	}
    
    @Override
	public List<RepuestoAdapter> load(int first, int pageSize, String sortField, SortOrder sortOrder, Map<String, String> filters) {
    	try {
			listaRepuestos = repuestoService.buscarRepuestos(first, pageSize, sortOrder, sortField, repuestoFiltro);
			nroRegistros = repuestoService.obtenerNumeroRepuestosBusqueda(repuestoFiltro);
			setRowCount(nroRegistros);
			return listaRepuestos;
		} catch (DivemotorBusinessException e) {
			LOGGER.error("EX* buscarRepuestos DivemotorBusinessException: " + e.getMessage());
			return null;
		} catch (Exception e) {
			LOGGER.error("EX* buscarRepuestos Exception: " + e.getMessage());
			return null;
		}
	}

    
    @Override
	public Object getRowKey(RepuestoAdapter repuesto) {
		return repuesto.getIdRepuesto();
	}

	@Override
	public RepuestoAdapter getRowData(String repuestoId) {
		Integer id = Integer.valueOf(repuestoId);
		for (RepuestoAdapter repuesto : listaRepuestos) {
			if (id.equals(repuesto.getIdRepuesto())) {
				return repuesto;
			}
		}
		return null;
	}

	public List<RepuestoAdapter> getListaRepuestos() {
		return listaRepuestos;
	}

	public void setListaRepuestos(List<RepuestoAdapter> listaRepuestos) {
		this.listaRepuestos = listaRepuestos;
	}

	public Integer getNroRegistros() {
		return nroRegistros;
	}

	public void setNroRegistros(Integer nroRegistros) {
		this.nroRegistros = nroRegistros;
	}
	
}
